package com.liyy.platform.other.mytest;

public class TestRecursion {

	public static void main(String[] args) {
		System.out.println("递归方法实现阶乘结果："+new TestRecursion().Recursion(5)); 
		System.out.println("普通方法实现阶乘结果："+new TestRecursion().jiecheng(5)); 
	}
	//递归计算阶乘
	/*递归的缺点：
	 * 栈主要是用来存放栈帧的，每执行一个方法就会出现压栈操作，所以采用递归的时候产生的栈帧比较多，
	 * 递归就会影响到内存，非常消耗内存，而使用for循环就执行了一个方法，压入栈帧一次，只存在一个栈帧，
	 * 所以比较节省内存。*/
	public long Recursion(long l){
		if(l==1){
			return 1;//定义递归头。解答：什么时候不调用自身的方法。如果没有递归头，将陷入死循环中。
		}else{
			return l*Recursion(l-1);//递归体。解答：解答什么时候需要调用自身方法。
		}
	}
	
	//普通方法计算阶乘，不会造成频繁压栈操作，不会占用大量内存
	public long jiecheng(long l){
		 long i, result = 1;
	        for (i = 1; i <= l; i++) {
	        	result = result * i;
	        }
	        return result;
	}

}
